# coding=utf-8
# __author__ = "James Zhang"
# !/usr/bin/python
# -*- coding: utf-8 -*-
"""
Latin1是ISO-8859-1的别名，有些环境下写作Latin-1。
　　ISO-8859-1编码是单字节编码，向下兼容ASCII，其编码范围是0x00-0xFF，0x00-0x7F之间完全和ASCII一致，0x80-0x9F之间
是控制字符，0xA0-0xFF之间是文字符号。ISO-8859-1收录的字符除ASCII收录的字符外，还包括西欧语言、希腊语、泰语、阿
拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚，没有被收录在ISO-8859-1当中。

    因为ISO-8859-1编码范围使用了单字节内的所有空间，在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流
    都不会被抛弃。换言之，把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。
    这是个很重要的特性，--> MySQL <---  数据库默认编码是Latin1就是利用了这个特性。
    ASCII编码是一个7位的容器，ISO-8859-1编码是一个8位的容器。
"""
import json
try:
    import cPickle as pickle
except ImportError:
    import pickle


class BaseJSONSerializer(object):
    def dumps(self, obj):
        return json.dumps(obj, separators=(",", ":")).encode('latin-1')

    def loads(self, data):
        return json.loads(data.decode('latin-1'))


class PickleSerializer(object):

    def dumps(self, obj):
        return pickle.dumps(obj, pickle.HIGHEST_PROTOCOL)

    def loads(self, data):
        return pickle.loads(data)

JSONSerializer = BaseJSONSerializer
